#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define ROW 30//行
#define RANK 50//列

int x[] = {1, 0, 0, -1};    // 方向数组，D<L<R<U
int y[] = {0, -1, 1, 0};
char arr[ROW][RANK];		//迷宫地图数组
int book[ROW][RANK];        // 是否遍历过
char dir[ROW][RANK];        // 记录轨迹

struct A {//表示一个坐标点的结构体
    int x;
    int y;
};

struct A list[ROW * RANK];//存储待遍历的坐标点
int list_size = 0;//表示当前存储的位置数量

void addToList(int x, int y) {//将x,y封装到结构体A的实例，并添加到一个数组中
    struct A a;
    a.x = x;
    a.y = y;
    list[list_size++] = a;//通过list_size变量来确定添加的位置
}
//DFS
int main() {
	//读取每一行的迷宫布局，并将其存储在arr中
    for (int i = 0; i < ROW; i++) {
        char ss[RANK];
        scanf("%s", ss);
        strcpy(arr[i], ss);//将字符串ss的内容复制到数组arr的第i个元素中。
    }
	//粗书画结构体A的实例a，并将其坐标（0，0）添加到list数组中，同时标记该位置已被访问
    struct A a;
    a.x = 0;
    a.y = 0;
    addToList(a.x, a.y);
    book[0][0] = 1;
    int flag = 0;

	//从当前可访问的位置出发，尝试向四个方向移动，并检查新位置是否满足条件
    for (int i = 0; i < list_size; i++) {
        struct A tmp = list[i];
        for (int k = 0; k < 4; k++) {
            int dx = tmp.x + x[k];
            int dy = tmp.y + y[k];
            if (dx < 0 || dx >= ROW || dy < 0 || dy >= RANK) {//在迷宫范围内
                continue;
            }
            if (arr[dx][dy] == '1') {//未被访问过
                continue;
            }
            if (book[dx][dy] == 1) {//不是障碍物
                continue;
            }
            book[dx][dy] = 1;//满足以上条件，则标记新位置为已访问
            addToList(dx, dy);    // 添加到list数组


            // 记录轨迹
            if (k == 0) {
                dir[dx][dy] = 'D';
            } else if (k == 1) {
                dir[dx][dy] = 'L';
            } else if (k == 2) {
                dir[dx][dy] = 'R';
            } else {
                dir[dx][dy] = 'U';
            }

			//如果当前位置是终点，设置flag为1
            if (dx == ROW - 1 && dy == RANK - 1) {
                flag = 1;
                break;
            }
        }
        if (flag == 1) {
            break;
        }
    }

	//从终点回溯到起点
    char trace[ROW * RANK];//数组trace用于存储从终点回溯到起点的路径方向。
	//i,j为终点坐标
    int i = ROW - 1;
    int j = RANK - 1;
    int trace_size = 0;//跟踪trace数组中当前存储的方向数量
    while (i != 0 || j != 0) {//直到回到起点前一直循环
        trace[trace_size++] = dir[i][j];//将当前位置的方向dir存储到trace中
        if (dir[i][j] == 'D') {
            i = i - 1;
        } else if (dir[i][j] == 'L') {
            j = j + 1;
        } else if (dir[i][j] == 'R') {
            j = j - 1;
        } else {
            i = i + 1;
        }
    }

	//打印路径
    for (int k = trace_size - 1; k >= 0; k--) {
        printf("%c", trace[k]);
    }

    return 0;
}
